/**
 * 环境配置文件
 * 
 * 提供不同环境下的配置，包括:
 * - 开发环境 (development)
 * - 测试环境 (testing)
 * - 生产环境 (production)
 */

// 存储键名定义
const STORAGE_KEY = 'NONGHI_ENV_CONFIG';

// 环境配置
const envConfig = {
  // 开发环境配置 - 使用本地API
  development: {
    serverUrl: 'http://localhost:3000',
    baseUrl: 'http://localhost:3000/api',
    debug: true,
    showDevTools: true
  },
  
  // 测试环境配置 - 使用远程测试服务器
  testing: {
    serverUrl: 'https://nh.aiqji.cn/',
    baseUrl: 'https://nh.aiqji.cn/api',
    debug: true,
    showDevTools: true // 在测试环境也显示环境配置按钮
  },
  
  // 生产环境配置 - 使用正式服务器，禁用调试和开发工具
  production: {
    serverUrl: 'https://api.nonghi.com',
    baseUrl: 'https://api.nonghi.com/api',
    debug: false,
    showDevTools: false // 生产环境不显示环境配置按钮
  }
};

// 获取当前环境，默认为开发环境
// 小程序中可手动修改此值，也可基于小程序版本自动设置
// wx.getAccountInfoSync().miniProgram.envVersion:
// - develop: 开发版
// - trial: 体验版
// - release: 正式版
let currentEnv = 'development';

/**
 * 设置当前环境
 * @param {string} env - 环境名称: development|testing|production
 */
function setEnv(env) {
  if (envConfig[env]) {
    currentEnv = env;
    console.log(`环境已切换至: ${env}`);
    
    // 保存环境配置到本地存储
    saveEnvConfig(env);
  } else {
    console.error(`不支持的环境类型: ${env}`);
  }
}

/**
 * 保存环境配置到本地存储
 * @param {string} env - 环境名称
 */
function saveEnvConfig(env) {
  try {
    wx.setStorageSync(STORAGE_KEY, env);
    console.log(`环境配置 ${env} 已保存到本地存储`);
  } catch (e) {
    console.error('保存环境配置失败:', e);
  }
}

/**
 * 从本地存储加载环境配置
 * @returns {string|null} 环境名称或null
 */
function loadSavedEnvConfig() {
  try {
    const savedEnv = wx.getStorageSync(STORAGE_KEY);
    if (savedEnv && envConfig[savedEnv]) {
      console.log(`从本地存储加载环境配置: ${savedEnv}`);
      return savedEnv;
    }
  } catch (e) {
    console.error('读取保存的环境配置失败:', e);
  }
  return null;
}

/**
 * 获取当前环境配置
 * @returns {object} 当前环境的配置对象
 */
function getConfig() {
  return envConfig[currentEnv];
}

/**
 * 初始化环境配置，根据小程序版本自动选择环境
 */
function initEnv() {
  try {
    // 先尝试从本地存储加载环境设置
    const savedEnv = loadSavedEnvConfig();
    if (savedEnv) {
      setEnv(savedEnv);
      return; // 如果成功加载保存的环境，则提前返回
    }
    
    // 如果没有保存的环境设置，则根据小程序版本自动设置
    const accountInfo = wx.getAccountInfoSync();
    const envVersion = accountInfo.miniProgram.envVersion;
    
    switch (envVersion) {
      case 'develop':  // 开发版
        setEnv('development');
        break;
      case 'trial':    // 体验版
        setEnv('testing');
        break;
      case 'release':  // 正式版
        setEnv('production');
        break;
      default:
        setEnv('development'); // 默认开发环境
    }
    
    console.log(`根据小程序版本[${envVersion}]自动设置环境为: ${currentEnv}`);
  } catch (e) {
    console.error('环境初始化错误:', e);
    setEnv('development'); // 出错时使用开发环境
  }
}

/**
 * 获取是否显示开发者工具
 * @returns {boolean} 是否显示开发者工具
 */
function shouldShowDevTools() {
  const config = getConfig();
  return config.showDevTools || false;
}

module.exports = {
  setEnv,
  getConfig,
  initEnv,
  shouldShowDevTools, // 导出新函数
  get currentEnv() { return currentEnv; }
};
